package com.cskaoyan.javase.homework.day09;

/**
 * 测试类
 * @since 09:31
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Test {
    public static void main(String[] args) {
        new A();
        // System.out.println(A.a);
    }
}

class A {


    /*
        类加载实际上分成大的三个步骤
        加载 --> 连接 --> 初始化
        加载是将class文件读取进方法区,这个过程是通过I/O流的形式
        连接,是进行静态成员变量默认初始化的过程
        初始化,是进行静态成员变量显式赋值和执行静态代码块的过程
            初始化的过程就是执行JVM自己封装的方法,clinit方法
            在类初始化执行代码的过程,完全有可能再次碰到类初始化的时机
            但是这时不会再次初始化,类初始化只有一次
            加载和连接完毕后,该类其实就已经准备完毕了.
     */

    static A a = new A();

    {
        System.out.println("构造代码块");
    }

    public A(){
        System.out.println("构造器");
    }


    static {
        System.out.println("静态代码块");
    }

}